package jcpcotizaciones.Control;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import jcpcotizaciones.Modelo.OrdenDeProduccion;

/**
 * Darwin Silva Vargas
 * Viviana Figueroa Barros
 * Carlos Manota Mejía
 * Elkin Cedeño
 */

public class ControlOrdenDeProduccion {
    private static List ordenDeProduccion;
    private static Connection con;

     public static int proximo(){
        try{
            String sql = "SELECT MAX(numero)+1 as Proximo FROM ordenproduccion";
            ManejadorBaseDatos basedatos = ManejadorBaseDatos.getInstancia();
            basedatos.conectar();
            ResultSet res = basedatos.consultar( sql );
            int prox = 0;
            if( res.next() ){
                 prox =  res.getInt("Proximo");
                return prox;
            }
            else{
                return prox;
            }
        }
        catch(Exception er){
            System.out.println("Error al consultar la proxima orden de produccion"); // logo
            return 0;
        }
    }



    public static void agregarOrdenDeProduccion (OrdenDeProduccion op) throws SQLException, Exception{
        ManejadorBaseDatos mbd= ManejadorBaseDatos.getInstancia();
        mbd.conectar();
        con= mbd.getConexion();
        if (con == null ){
          throw new SQLException(" No hay conexion ");
        }

        PreparedStatement pst = null;
        try {
          pst = con.prepareStatement("Insert Into ordenproduccion values(?,?,?,?,?,?)");
          pst.setString(1,op.getNumero());
          pst.setDouble(2,op.getSubtotal());
          pst.setDouble(3,op.getIva());
          pst.setDouble(4,op.getTotal());
          pst.setString(5,op.getProveedor().getCodigoProvee());
          pst.setString(6,op.getUsu().getCodigo());

            pst.executeUpdate();
        }finally {
            if (pst != null) {
                 pst.close();
            }
        }
    }

    public static OrdenDeProduccion BuscarOrdenDeProduccion(String num) throws SQLException{
         ResultSet rs = null;
         PreparedStatement pst = null;
         OrdenDeProduccion op = null;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("select * from ordenproduccion where numero = ?");
         pst.setString(1, num);

         rs = pst.executeQuery();
         while(rs.next()) {
             op = OrdenDeProduccion.load(rs);
         }
    } finally {
         if (rs != null) {
            rs.close();
         }
         if (pst != null) {
           pst.close();
         }
          return op;
    }
    }

    public static boolean ModificarOrdenDeProduccion(OrdenDeProduccion op, String num) throws SQLException, Exception{
      if ( BuscarOrdenDeProduccion(num) == null) {
          throw new SQLException ("Orden de producción no registrada ");
      }
       PreparedStatement pst = null;
       boolean res=false;
       try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("Update ordenproduccion set numero=?, subtotalitem=?, iva=?, total=?, proveedor_codproveedor=?, usuario_codusuario=?  WHERE numero = ?" );
          pst.setString(1,op.getNumero());
          pst.setDouble(2,op.getSubtotal());
          pst.setDouble(3,op.getIva());
          pst.setDouble(4,op.getTotal());
          pst.setString(5,op.getProveedor().getCodigoProvee());
          pst.setString(6, op.getUsu().getCodigo());
          pst.setString(7,num);

         int r= pst.executeUpdate();
         if (r != 0) {
          res = true;
       }
       } finally {
          if (pst != null) {
            pst.close();
          }
       }
       return res;
     }

    public static void EliminarOrdenDeProduccion(String num) throws SQLException, Exception{
         if (BuscarOrdenDeProduccion(num) == null) {
        throw new SQLException("No hay elemento clave de la clase orden de produccion ");
     }
     PreparedStatement pst = null;

     try {
        ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
        mbd.conectar();
        con=mbd.getConexion();
        pst = con.prepareStatement("delete from ordenproduccion where numero = ?");
        pst.setString(1, num);
        pst.executeUpdate();

     } finally {
        if (pst != null) {
           pst.close();
        }
     }

     }

    public static void listarOrdenDePedido() throws SQLException, Exception {
     ResultSet rs = null;
     PreparedStatement pst = null;
     ordenDeProduccion = new LinkedList();
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
        pst = con.prepareStatement("select * from ordenproduccion");
        rs = pst.executeQuery();
        while(rs.next()) {
                ordenDeProduccion.add(OrdenDeProduccion.load(rs));
        }
    } finally {
        if (rs != null) {
           rs.close();
       }
        if (pst != null) {
          pst.close();
       }
    }
}

    public static List getOrdenDeProduccion() {
        return ordenDeProduccion;
    }

    public static void setOrdenDeProduccion(List aOrdenDeProduccion) {
        ordenDeProduccion = aOrdenDeProduccion;
    }

}